package org.eda2;

// Clase que instancia los elementos de las listas utilizadas en la practica.
// Son los elementos de estudio de nuestra practica.
/**
 * Clase User.
 */

public class User {

	/**
	 * Atributo de clase: name. Hace referencia al nombre del usuario. En
	 * nuestro caso, corresponde con la linea dentro del fichero de texto sobre
	 * el que se realiza el estudio.
	 */
	private String name;

	/**
	 * Atributo de clase: ce. Hace referencia al consumo de electricidad del
	 * usuario.
	 */
	private int ce;

	/**
	 * Atributo de clase: ice. Hace referencia al indice estimado del consumo
	 * del usuario.
	 */
	private int ice;

	/**
	 * Atributo de clase mcl. Hace referencia al valor medio del coste local.
	 */
	private int mcl;

	/**
	 * Atributo de clase diferencia. Hace referencia a la diferencia entre el
	 * mcl y el ice del usuario.
	 */
	private int diferencia;

	/**
	 * Atributo de clase modulo. Hace referencia a la diferencia entre la ICE
	 * del usuario y la ICE de otro usuario, en valor absoluto.
	 */
	private int modulo;

	/**
	 * Atributo de clase tiempoInspec. Hace referencia al tiempo empleado por un
	 * inspector de la empresa en su inspeccion, en base a una formula
	 * preesyablecida.
	 */
	private int tiempoInspec;

	/**
	 * Atributo de clase avenida. Hace referencia a una coordenada de situacion
	 * del usuario.
	 */
	private int avenida;

	/**
	 * Atributo de clase calle. Hace referencia a la otra coordenada de
	 * situacion del usuario.
	 */
	private int calle;

	/**
	 * Metodo User. Metodo constructor de la clase. Inicializa un nuevo usuario.
	 * 
	 * @param name
	 *            . Variable de tipo String. Hace referencia al nombre del
	 *            usuario, correspondiente a la linea en la que aparece en el
	 *            fichero de texto.
	 * @param ice
	 *            . Variable de tipo int. Hace referencia al indice estimado al
	 *            consumo del usuario.
	 * 
	 * @param ce
	 *            . Variable de tipo int. Hace referencia al consumo del
	 *            usuario.
	 * @param mcl
	 *            . Variable de tipo int. Hace referencia a la media local de
	 *            ice.
	 * @param diferencia
	 *            . Variable int. Hace referencia a la diferencia entre el mcl y
	 *            ice.
	 * @param modulo
	 *            . Varaible de tipo int. Hace referencia al modulo.
	 * @param tiempoInspec
	 *            . Varaible de tipo int. Hace referencia al tiempo de duraria
	 *            la inspeccion de dicho usuario.
	 * @param avenida
	 *            . Variable de tipo int. Hace referencia a la avenida donde se
	 *            situa el usuario.
	 * @param calle
	 *            . Variable de tipo int. Hace referencia a la calle donde se
	 *            situa el usuario.
	 * 
	 */
	public User(String name, int ice, int ce) {
		this.name = name;
		this.ce = ce;
		this.ice = ice;
		this.mcl = -1;
		this.diferencia = -1;
		this.modulo = -1;
		this.tiempoInspec = -1;
		this.avenida = -1;
		this.calle = -1;
	}

	public int getTiempoInspec() {
		return tiempoInspec;
	}

	public void setTiempoInspec(int tiempoInspec) {
		this.tiempoInspec = tiempoInspec;
	}

	/**
	 * Metodo toString. Metodo que devuelve en formato texto, los atributos de
	 * una instancia de la clase.
	 * 
	 * @return Variable de tipo String.
	 */
	@Override
	public String toString() {
		return name + ";" + ice + ";" + ce;
	}

	/**
	 * Metodo toStringMcl. Metodo que devuelve en formato texto, los atributos
	 * de una instancia de la clase.
	 * 
	 * @return Variable de tipo String.
	 */
	public String toStringMcl() {
		return name + ";" + ice + ";" + ce + ";" + mcl + ";" + diferencia;
	}

	/**
	 * Metodo toStringTiempoInspec. Metodo que devuelve en formato texto, los
	 * atributos de una instancia de la clase.
	 * 
	 * @return Variable de tipo String.
	 */
	public String toStringTiempoInspec() {
		return name + ";" + ice + ";" + ce + ";" + mcl + ";" + diferencia + ";"
				+ tiempoInspec;
	}

	/**
	 * Metodo getName. Metodo que devuelve el nombre del usuario.
	 * 
	 * @return name. Variable de tipo String.
	 */
	public String getName() {
		return name;
	}

	/**
	 * Metodo setName. Metodo que modifica el nombre del usuario, por otro nuevo
	 * pasado por parametro.
	 * 
	 * @param name
	 *            . Variable de tipo String.
	 * 
	 */
	public void setName(String name) {
		this.name = name;
	}

	/**
	 * Metodo getIce. Metodo que devuelve el nombre de usuario.
	 * 
	 * @return ice. Variable de tipo int.
	 */
	public int getIce() {
		return ice;
	}

	/**
	 * Metodo setIce. Metodo que modifica el valor de ice del usuario, otro
	 * nuevo pasado por parametro.
	 * 
	 * @param ice
	 *            . Variable de tipo int.
	 */
	public void setIce(int ice) {
		this.ice = ice;
	}

	/**
	 * Metodo getMcl. Metodo que devuelve el mcl del usuario.
	 * 
	 * @return mcl. Variable de tipo int.
	 */
	public int getMcl() {
		return mcl;
	}

	/**
	 * Metodo setMcl. Metodo que modifica el mcl del usuario, por otro nuevo
	 * pasado por parametro.
	 * 
	 * @param mcl
	 *            , variable de tipo int.
	 */
	public void setMcl(int mcl) {
		this.mcl = mcl;
	}

	/**
	 * Metodo getCe. Metodo que devuelve el consumo del usuario.
	 * 
	 * @return ce, variable de tipo int.
	 */
	public int getCe() {
		return ce;
	}

	/**
	 * Metodo setCe. Metodo que modifica el consumo del usuario, por otro nuevo
	 * pasado por parametro.
	 * 
	 * @param ce
	 *            , variable de tipo int.
	 * 
	 */
	public void setCe(int auxCe) {
		this.ce = auxCe;
	}

	/**
	 * Metodo equals. Metodo que compara si 2 usuarios son iguales, por el
	 * atributo de clase name.
	 * 
	 * @return un boolean.
	 */
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		User other = (User) obj;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		return true;
	}

	/**
	 * Metodo getDiferencia. Metodo que devuelve la diferencia.
	 * 
	 * @return diferencia, variable de tipo int.
	 */
	public int getDiferencia() {
		return diferencia;
	}

	/**
	 * Metodo setDiferencia. Metodo que modifica el atributo diferencia, por una
	 * nueva pasada por paremetro.
	 * 
	 * @param diferencia
	 *            , variable de tipo int. Hace referencia a la nueva diferencia
	 *            pasada por parametro.
	 */
	public void setDiferencia(int diferencia) {
		this.diferencia = diferencia;
	}

	/**
	 * Metodo getModulo. Metodo que devuelve el modulo.
	 * 
	 * @return variable de tipo int.
	 */
	public int getModulo() {
		return modulo;
	}

	/**
	 * Metodo setModulo. Metodo que modifica el atributo modulo, por otro pasado
	 * por parametro.
	 * 
	 * @param modulo
	 *            , variable de tipo int. Hace referencia al nuevo modulo pasado
	 *            por paremetro.
	 */
	public void setModulo(int modulo) {
		this.modulo = modulo;
	}

	/**
	 * Metodo getAvenida. Metodo que devuelve el atributo avenida.
	 * 
	 * @return variable de tipo int.
	 */
	public int getAvenida() {
		return avenida;
	}

	/**
	 * Metodo setAvenida. Metodo que modifica el atributo avenida, por una nueva
	 * pasada por parametro.
	 * 
	 * @param avenida
	 *            , variable de tipo int. Hace referencia a la nueva avenida
	 *            pasada por parametro.
	 */
	public void setAvenida(int avenida) {
		this.avenida = avenida;
	}

	/**
	 * Metodo getCalle. Metodo que devuelve el atributo calle.
	 * 
	 * @return variable de tipo int.
	 */
	public int getCalle() {
		return calle;
	}

	/**
	 * Metodo setCalle. Metodo que modifica el atributo calle por uno nuevo
	 * pasado por parametro.
	 * 
	 * @param calle
	 *            , variable de tipo int. Hace referencia a la nueva calle
	 *            pasada por parametro.
	 */
	public void setCalle(int calle) {
		this.calle = calle;
	}
}
